package br.com.biavan.dao;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import br.com.biavan.model.Usuario;
import br.com.biavan.utils.HibernateUtil;

public class UsuarioDAO {
	
	private Session session;		
			
	public boolean inserir(Usuario usuario) {
		boolean resp = false;
		try {
			session = HibernateUtil.getSession();
			session.beginTransaction();
			session.save(usuario);
			session.getTransaction().commit();
			resp = true;
		} catch (Exception e) {
			session.getTransaction().rollback();
			e.printStackTrace();
		} finally {
			session.close();
		}
		return resp;
	}

	public boolean atualizar(Usuario usuario) {
		boolean resp = false;
		try {
			session = HibernateUtil.getSession();
			session.beginTransaction();
			session.update(usuario);
			session.getTransaction().commit();
			resp = true;
		} catch (Exception e) {
			session.getTransaction().rollback();
			e.printStackTrace();
		} finally {
			session.close();
		}
		return resp;
	}

	public boolean apagar(Usuario usuario) {
		boolean resp = false;
		try {
			session = HibernateUtil.getSession();
			session.beginTransaction();
			session.delete(usuario);
			session.getTransaction().commit();
			resp = true;
		} catch (Exception e) {
			session.getTransaction().rollback();
			e.printStackTrace();
		} finally {
			session.close();
		}
		return resp;
	}

	public List<Usuario> listar() {
		List<Usuario> usuarios = new ArrayList();
		session = Conexao.getSession();
		try {
			session.beginTransaction();
			usuarios = session.createCriteria(Usuario.class).list();
			session.getTransaction().commit();
		} catch (Exception e) {
			session.getTransaction().rollback();
			e.printStackTrace();
		} finally {
			session.close();
		}
		return usuarios;
	}
	
	public Usuario getById(int id) {
		Usuario usuario = new Usuario();
		try {
			session = HibernateUtil.getSession();
			session.beginTransaction();
			usuario = (Usuario) session.get(Usuario.class, id);
			session.getTransaction().commit();
		} catch (Exception e) {
			session.getTransaction().rollback();
			e.printStackTrace();
		} finally {
			session.close();
		}
		return usuario;
	}
	
	public boolean verificarLogin(Usuario usuarioLogin) {
		Usuario usuario = new Usuario();
		try {
			session = HibernateUtil.getSession();
			session.beginTransaction();
			
			String select = "from Usuario as u "
					+ "where u.login = :login";
			
			Query query = session.createQuery(select)
					.setParameter("login", usuarioLogin.getLogin());
			
			List<?> resultList = query.list();
			for(Object obj : resultList) {
				Object grupo = (Object) obj;
				usuario = (Usuario) grupo;
			}
			
			session.getTransaction().commit();
		} catch (Exception e) {
			session.getTransaction().rollback();
			e.printStackTrace();
		} finally {
			session.close();
		}
		return usuario.equals(usuarioLogin);
	}
	
}


